/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EcranPosition.java
 *
 * Created on 8 avr. 2010, 08:46:37
 */

package vue;

import controleur.CCLogger;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.Vector;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import main.Outils;
import modele.Image;
import modele.ImageSurZone;
import modele.ZoneImage;
import vue.composants.EcranPositionCPD;
import vue.composants.EcranPositionMiniature;

/**
 *
 * @author Synapse
 */
public class EcranPosition extends Ecran {

    // Miniatures de la liste des images importées
    Vector<EcranPositionMiniature> miniatures = new Vector<EcranPositionMiniature>();

    // Apercu de la carte
    EcranPositionCPD cartePostaleDrawer;

    // Indique si l'on est en train de faire un drag and drop
    boolean dragAndDropping;

    // Image choisie par le drag and drop
    Image imageDND;
    // Zone choisie pour le drag and drop
    ZoneImage zoneImageDND;


    /**
     * Constructeur de la class EcranPosition
     * @param mere type FenetreMere
     * @see FenetreMere
     */
    public EcranPosition(FenetreMere mere) {
        super(mere);
        initComponents();

        try
        {
            // Création de l'aperçu
            Dimension dim = new Dimension(536, 400);
            cartePostaleDrawer = new EcranPositionCPD(ressources, this, ressources.getCartePostale(), "position", dim);

            initialiser();
        }
        catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            this.afficherMessageErreur("Une erreur est survenue lors de l'initialison de l'écran Position.");
        }
    }


    /**
     * Initialisation de l'écran.
     */
    public void initialiser() {

        // Données du drag and drop
        dragAndDropping = false;
        imageDND = null;
        zoneImageDND = null;


        // On recupère les images importées
        Vector<Image> imports = ressources.getImagesImportees();
        
        // On doit enlever à la liste celles déjà placées
        ImageSurZone[] imagesSurZones = ressources.getCartePostale().getImagesSurZones();
        if( imagesSurZones != null ) {
            for(int i = 0; i < imagesSurZones.length; i++) {
                if( imagesSurZones[i] != null && imports.contains( imagesSurZones[i].getImage() ))
//                if( imagesSurZones[i] != null ) {
//                    for (Image image : imports) {
//                        if(image == imagesSurZones[i].getImage())
                            imports.remove(imagesSurZones[i].getImage());
//                    }
                    
//                }
            }
        }

        // On construit la liste des miniatures à partir du vecteur
        GridLayout grillePositionnement = new GridLayout(imports.size(), 1, 0, 0);
        grillePositionnement.setHgap(10);
        grillePositionnement.setVgap(30);
        panelImports.setLayout( grillePositionnement );
        for (Image image : imports) {

            // Création d'une miniature
            EcranPositionMiniature miniature = new EcranPositionMiniature(cartePostaleDrawer, image, new Dimension(201, 150));
            miniatures.add( miniature );

            // Ajout à la liste
            panelImports.add( miniatures.lastElement() );
        }

        // On dégrise le bouton suivant si assez d'image placées
        int nbImagesAPositionner = ressources.getCartePostale().getModele().getZoneImage().length;
        ImageSurZone[] imagesPositionnes = ressources.getCartePostale().getImagesSurZones();
        int nbImagesPositionnees = 0;
        if( imagesPositionnes != null ) {
            for(int i = 0; i < imagesPositionnes.length; i++) {
                if( imagesPositionnes[i] != null )
                    nbImagesPositionnees++;
            }
        }
        btnSuivant.setEnabled( nbImagesPositionnees >= nbImagesAPositionner );

        // On place l'apercu sur l'écran
        BorderLayout bLayout = new BorderLayout();
        panelApercu.setLayout(bLayout);
        panelApercu.add(cartePostaleDrawer, BorderLayout.CENTER);
    }



    public void dndDebut() {
        // On change le curseur
        setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) );
    }

    public void dndFin() {
        // On retourne au curseur de base
        setCursor( Cursor.getDefaultCursor() );
    }


    public Image getImageDND() {
        return imageDND;
    }

    public ZoneImage getZoneImageDND() {
        return zoneImageDND;
    }

    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnPrecedent = new javax.swing.JButton();
        btnRecommencer = new javax.swing.JButton();
        btnSuivant = new javax.swing.JButton();
        labBandeau = new javax.swing.JLabel();
        labIndication = new javax.swing.JLabel();
        scrollPane = new javax.swing.JScrollPane();
        panelImports = new javax.swing.JPanel();
        panelApercu = new javax.swing.JPanel();

        setBackground(new java.awt.Color(255, 255, 255));
        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 204, 255), 2));
        setMaximumSize(new java.awt.Dimension(1024, 768));
        setMinimumSize(new java.awt.Dimension(1024, 768));
        setPreferredSize(new java.awt.Dimension(1024, 768));

        btnPrecedent.setFont(new java.awt.Font("Tahoma", 0, 18));
        btnPrecedent.setText("< Précédent");
        btnPrecedent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPrecedentActionPerformed(evt);
            }
        });

        btnRecommencer.setFont(new java.awt.Font("Tahoma", 0, 18));
        btnRecommencer.setText("Recommencer");
        btnRecommencer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRecommencerActionPerformed(evt);
            }
        });

        btnSuivant.setFont(new java.awt.Font("Tahoma", 0, 18));
        btnSuivant.setText("Suivant >");
        btnSuivant.setEnabled(false);
        btnSuivant.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSuivantActionPerformed(evt);
            }
        });

        labBandeau.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vue/images/choixposition.png"))); // NOI18N
        labBandeau.setMaximumSize(new java.awt.Dimension(1024, 88));
        labBandeau.setMinimumSize(new java.awt.Dimension(1024, 88));
        labBandeau.setPreferredSize(new java.awt.Dimension(1024, 88));

        labIndication.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        labIndication.setText("Faites glisser déposer vos images depuis la liste sur l'emplacement désiré :");

        javax.swing.GroupLayout panelImportsLayout = new javax.swing.GroupLayout(panelImports);
        panelImports.setLayout(panelImportsLayout);
        panelImportsLayout.setHorizontalGroup(
            panelImportsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 305, Short.MAX_VALUE)
        );
        panelImportsLayout.setVerticalGroup(
            panelImportsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 563, Short.MAX_VALUE)
        );

        scrollPane.setViewportView(panelImports);

        javax.swing.GroupLayout panelApercuLayout = new javax.swing.GroupLayout(panelApercu);
        panelApercu.setLayout(panelApercuLayout);
        panelApercuLayout.setHorizontalGroup(
            panelApercuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 679, Short.MAX_VALUE)
        );
        panelApercuLayout.setVerticalGroup(
            panelApercuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 565, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(labBandeau, javax.swing.GroupLayout.DEFAULT_SIZE, 1024, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labIndication)
                .addContainerGap(427, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnPrecedent, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(198, 198, 198)
                .addComponent(btnRecommencer, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 206, Short.MAX_VALUE)
                .addComponent(btnSuivant, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(scrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 307, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(panelApercu, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(labBandeau, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(labIndication)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelApercu, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnPrecedent, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnRecommencer, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnSuivant, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Appelé par l'apercu de la carte si un drag and drop correct viens d'être effectué.
     */
    public void dragAndDropPerformed(Image image, ZoneImage zoneImage) {

        // On stock les informations
        imageDND = image;
        zoneImageDND = zoneImage;

        // On donne la main au controleur
        try {
            controleur.trPositionnementDND();
        }
        catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, ex.getStackTrace().toString());
            this.afficherMessageErreur("Le traitement du glissé-déposé à echoué");
        }
    }

    private void btnPrecedentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrecedentActionPerformed
        controleur.trPositionnementPrecedent();
}//GEN-LAST:event_btnPrecedentActionPerformed

    private void btnRecommencerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRecommencerActionPerformed
        this.trClicSurRecommencer();
}//GEN-LAST:event_btnRecommencerActionPerformed

    private void btnSuivantActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSuivantActionPerformed
        controleur.trPositionnementSuivant();
}//GEN-LAST:event_btnSuivantActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnPrecedent;
    private javax.swing.JButton btnRecommencer;
    private javax.swing.JButton btnSuivant;
    private javax.swing.JLabel labBandeau;
    private javax.swing.JLabel labIndication;
    private javax.swing.JPanel panelApercu;
    private javax.swing.JPanel panelImports;
    private javax.swing.JScrollPane scrollPane;
    // End of variables declaration//GEN-END:variables

}
